/*
 *
 * Copyright (C) 2012 Walter Lütgenau
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * 
 */
package offset.nodes.server.virtual.model.sax;

import java.util.Iterator;
import java.util.Properties;
import javax.jcr.RepositoryException;
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl;

/**
 *
 * @author Walter Lütgenau
 */
public class ElementContentSource implements SAXContentSource {
    String elementName;
    Properties attributes;
    ContentHandler contentHandler = null;
    
    public ElementContentSource(String elementName, Properties attributes) {
        this.elementName = elementName;
        this.attributes = attributes;
    }

    public void setContentHandler(ContentHandler contentHandler) {
        this.contentHandler = contentHandler;
    }

    public void writeContent() throws RepositoryException, SAXException {
        if ( contentHandler == null || elementName == null)
            return;
        
        AttributesImpl atts = new AttributesImpl();
        Iterator i = attributes.keySet().iterator();
        while( i.hasNext() ) {
            String key = (String) i.next();
            String value = attributes.getProperty(key);
            
            QNameToSAX converter = new QNameToSAX(key);
            atts.addAttribute(converter.getUri(), converter.getLocalName(), converter.getQName(), "CDATA", value);
        }        
        
        contentHandler.startDocument();
        
        QNameToSAX converter = new QNameToSAX(elementName);
        contentHandler.startElement(converter.getUri(), converter.getLocalName(), converter.getQName(), atts);
        contentHandler.endElement(converter.getUri(), converter.getLocalName(), converter.getQName());
        
        contentHandler.endDocument();
    }

}
